package com.dashanchessgame.chess;

import com.dashanchessgame.tools.ImageTool;
import com.dashanchessgame.tools.WinUtils;

import java.awt.*;

/**
 * 将
 *
 * @author 37460
 */
public class ChessCheckMate implements Chess {
    /**
     * chessCheck  检查落子是否合法
     * <p>
     * map              地图
     * nowLineNumber   当前棋子的行号
     * nowColumnNumber 当前棋子的列号
     * toLineNumber    棋子要去的行号
     * toColumnNumber  棋子要去的列号
     * isChessColor     判断棋子的攻守方  黑的返回true 红的返回false
     * 如果可以去，返回true, 否则返回false
     */
    @Override
    public boolean chessCheck(int[][] map, int nowLineNumber, int nowColumnNumber, int toLineNumber, int toColumnNumber, boolean isChessColor) {
        int count = 0;//用来统计棋子的行径路上有没有棋子有的话count就加1
        int istoLineNumber = Math.abs(nowLineNumber - toLineNumber);  // 获取相差的行数
        int istoColumnNumber = Math.abs(nowColumnNumber - toColumnNumber);// 获取相差的列数
        int minR = nowLineNumber < toLineNumber ? nowLineNumber : toLineNumber;
        int maxR = nowLineNumber > toLineNumber ? nowLineNumber : toLineNumber;
        for (int i = minR + 1; i < maxR; i++) {//如果双方 将军之间有棋子的话，不可走棋
            if (istoColumnNumber == 0 && map[i][nowColumnNumber] != 0) {
                count = 1;
                return false;
            }
        }
        //判断将的位置是不是在范围移动范围里面
        if ((((istoColumnNumber == 1 && istoLineNumber == 0) || (istoColumnNumber == 0 && istoLineNumber == 1)
                && (toLineNumber <= 2 && toColumnNumber <= 5)) || (toLineNumber >= 7 && toLineNumber <= 9)) || count == 0) {

            return WinUtils.win(map, toLineNumber, toColumnNumber, isChessColor);

        } else {
            return false;
        }
    }


    @Override
    public int getType() {
        return 'J';
    }


    @Override
    public Image getImage(boolean isChessColor) {

        return ImageTool.loadImage(isChessColor ? "黑将.gif" : "红将.gif");
    }
}
